#!usr/bin/env python  
#@time: 2018/01/19 
from multiprocessing import Process, Queue
import os, time, random

def write(q):
    print('进程 写入:%s' % os.getpid())
    for val in ['A','B','C']:
        print('把 %s 放入队列...' % val)
        q.put(val)
        time.sleep(random.random())

def read(q):
    print('进程 读:%s' % os.getpid())
    while True:
        value = q.get(True)
        print('Get %s from queue。' %value)

# __name__ 是当前模块名，当模块被直接运行时模块名为 __main__ 。
# 这句话的意思就是，当模块被直接运行时，以下代码块将被运行，当模块是被导入时，代码块不被运行。
if __name__ == '__main__':
    print('当前模块名称:%s' % __name__)
    q = Queue()
    pw = Process(target=write, args=(q,))
    pr = Process(target=read, args=(q,))

    # 启动子进程
    pw.start()
    pr.start()

    # 等待 pw 结束
    pw.join()
    # pr进程是死循环，强制终止
    pr.terminate()